% ______________________________________________________________________
% Ejercicio 1

?- ciudades([atlanta, buenos_aires, cordoba, lisboa, madrid, mdq, new_york, rio, salta]).

% Sacamos rio
?- retractall(llega(rio, _, _)).
?- retractall(llega(buenos_aires, rio, 4)).
?- ciudades([atlanta, buenos_aires, cordoba, lisboa, madrid, mdq, new_york, salta]).

% Sacamos lisboa
?- retractall(llega(lisboa, madrid, 1)).
?- retractall(llega(madrid, lisboa, 1)).
?- ciudades([atlanta, buenos_aires, cordoba, madrid, mdq, new_york, salta]).

% Volvemos a agregar las ciudades que sacamos
?- assert(llega(buenos_aires, rio, 4)).
?- assert(llega(rio, buenos_aires, 4)).
?- assert(llega(rio, new_york, 10)).
?- assert(llega(lisboa, madrid, 1)).
?- assert(llega(madrid, lisboa, 1)).
?- ciudades([atlanta, buenos_aires, cordoba, lisboa, madrid, mdq, new_york, rio, salta]).

% ______________________________________________________________________
% Ejercicio 2

?- viajeDesde(atlanta, atlanta, [atlanta], 0).
?- viajeDesde(atlanta, new_york, [atlanta, new_york], 3).
?- viajeDesde(atlanta, madrid, [atlanta, new_york, madrid], 12).
?- viajeDesde(atlanta, buenos_aires, [atlanta, new_york, buenos_aires], 14).
?- viajeDesde(atlanta, mdq, [atlanta, new_york, buenos_aires, mdq], 15).
?- viajeDesde(atlanta, cordoba, [atlanta, new_york, buenos_aires, cordoba], 16).

?- viajeDesde(rio, rio, [rio], 0).
?- viajeDesde(rio, buenos_aires, [rio, buenos_aires], 4).
?- viajeDesde(rio, new_york, [rio, new_york], 10).
?- viajeDesde(rio, mdq, [rio, buenos_aires, mdq], 5).

% ______________________________________________________________________
% Ejercicio 3

?- viajeSinCiclos(buenos_aires, madrid, [buenos_aires, atlanta, new_york, madrid], 23).
?- viajeSinCiclos(buenos_aires, madrid, [buenos_aires, rio, new_york, madrid], 23).
?- viajeSinCiclos(buenos_aires, madrid, [buenos_aires, madrid], 12).
?- viajeSinCiclos(cordoba, atlanta, [cordoba, salta, buenos_aires, atlanta], 14).

?- viajeSinCiclos(new_york, lisboa, [new_york, madrid, lisboa], 10).
?- viajeSinCiclos(new_york, lisboa, [new_york, buenos_aires, madrid, lisboa], 24).

?- viajeSinCiclos(salta, rio, [salta, buenos_aires, rio], 6).

?- viajeSinCiclos(salta, cordoba, [salta, buenos_aires, cordoba], 4).

?- viajeSinCiclos(salta, lisboa, [salta, buenos_aires, rio, new_york, madrid, lisboa], 26).
?- viajeSinCiclos(salta, lisboa, [salta, buenos_aires, madrid, lisboa], 15).
?- viajeSinCiclos(salta, lisboa, [salta, buenos_aires, atlanta, new_york, madrid, lisboa], 26).

% ______________________________________________________________________
% Ejercicio 4

?- viajeMasCorto(buenos_aires, madrid, [buenos_aires, madrid], 12).
?- viajeMasCorto(new_york, lisboa, [new_york, madrid, lisboa], 10).
?- viajeMasCorto(salta, rio, [salta, buenos_aires, rio], 6).
?- viajeMasCorto(salta, cordoba, [salta, buenos_aires, cordoba], 4).
?- viajeMasCorto(salta, lisboa, [salta, buenos_aires, madrid, lisboa], 15).

% ______________________________________________________________________
% Ejercicio 5

?- grafoCorrecto.

% Sacamos un eje, y ahora debería dar falso porque no queda conexo.
?- retractall(llega(cordoba, salta, 1)).
% ESTO DA FALSO
%?- grafoCorrecto.

% Volvemos a agregar el eje.
?- assert(llega(cordoba, salta, 1)).
?- grafoCorrecto.


% ______________________________________________________________________
% Ejercicio 6

% ESTO DA FALSO
%?- cubreDistancia([buenos_aires, atlanta, new_york, madrid], boeing_747).
%?- cubreDistancia([buenos_aires, atlanta, new_york, madrid], avion_falso).

?- cubreDistancia([buenos_aires, mdq], boeing_767).
?- cubreDistancia([buenos_aires, rio, new_york, madrid], boeing_747).
?- cubreDistancia([mdq, buenos_aires, cordoba, salta], airbus_a320).

% ______________________________________________________________________
% Ejercicio 7

?- cubreDistancia([mdq, buenos_aires, rio, new_york], boeing_747).
?- cubreDistancia([mdq, buenos_aires, rio, new_york, madrid, lisboa], boeing_747).
?- cubreDistancia([mdq, buenos_aires, rio], airbus_a320).
?- cubreDistancia([mdq, buenos_aires, rio, buenos_aires, cordoba, salta], airbus_a320).
?- cubreDistancia([mdq, buenos_aires, rio, new_york, madrid, buenos_aires], boeing_767).
?- cubreDistancia([rio, new_york, buenos_aires], boeing_767).
?- cubreDistancia([rio, new_york, buenos_aires, madrid, lisboa], boeing_767).

% ______________________________________________________________________
% Ejercicio 8

?- avionesValidos([airbus_a320]).
?- avionesValidos([airbus_a320, boeing_767]).
?- avionesValidos([airbus_a320, boeing_767, boeing_747]).

?- esAerolinea([ [rio,[airbus_a320]], [buenos_aires, [airbus_a320, boeing_767]], [cordoba, [airbus_a320]], [atlanta, [boeing_747]] ]).
?- esAerolinea([ [lisboa, [airbus_a320]], [new_york, [boeing_747]], 
[salta, [boeing_747, boeing_767]] ]).

?- aerolineaTieneAvionEn([ [rio,[airbus_a320]], [buenos_aires, [airbus_a320, boeing_767]], [cordoba, [airbus_a320]], [atlanta, [boeing_747]] ], buenos_aires, airbus_a320).
?- aerolineaTieneAvionEn([ [lisboa, [airbus_a320]], [new_york, [boeing_747]], 
[salta, [boeing_747, boeing_767]] ], lisboa, airbus_a320).
?- aerolineaTieneAvionEn([ [lisboa, [airbus_a320]], [new_york, [boeing_747]], 
[salta, [boeing_747, boeing_767]] ], new_york, boeing_747).

?- vueloSinTransbordo([ [rio,[airbus_a320]], [buenos_aires, [airbus_a320, boeing_767]], [cordoba, [airbus_a320]], [atlanta, [boeing_747]] ], buenos_aires, madrid, 12, boeing_767).

?- vueloSinTransbordo([ [rio,[airbus_a320]], [buenos_aires, [airbus_a320, boeing_767]], [cordoba, [airbus_a320]], [atlanta, [boeing_747]] ], rio, mdq, 5, airbus_a320).

?- vueloSinTransbordo([ [lisboa, [airbus_a320, boeing_767]], [new_york, [boeing_747]], 
[salta, [boeing_747, boeing_767]] ], lisboa, new_york, 27, boeing_767).
